package com.wksc.framework.impexp.bean;

import com.wksc.framework.impexp.constants.PatternType;
import com.wksc.framework.impexp.pattern.FormatPattern;

import java.io.Serializable;

/**
 * <p> Title(文件名): Header.java </p>
 * <p> Description(描述): 表头对象类 </p>
 * <p> Copyright(版权): Copyright (c) ${year} </p>
 * <p> Company(公司): 成都四方信息技术有限公司 </p>
 * <p> CreateTime(生成日期)：11-11-2上午10:38 </p>
 *
 * @author wanglei
 * @version ${project_name}
 */
public class Header implements Serializable{
	private static final long serialVersionUID = 6505807446564046351L;

	//表头的内容
    private String headLabel;

    //转换类型常量
    private PatternType patternType;
    
    //转换类型对应的转换表
    private FormatPattern pattern;

    //该列是否属于可以区分该行数据的关键列
    private boolean keyCol = false;
    //关键列分组标识
    private byte group = 1;

    /**
     * 普通的表头构造函数
     * @param headLabel 表头显示的名称
     */
    public Header(String headLabel) {
        this.headLabel = headLabel;
    }

    /**
     * 当数据库存的值与页面显示不一致时需要转换的表头的构造函数
     * @param headLabel 表头显示的名称
     * @param pattern 该表头所转换所需的模板。
     */
    public Header(String headLabel, FormatPattern pattern) {
        this.headLabel = headLabel;
        this.pattern = pattern;
    }
    
    /**
     * 当数据库存的值与页面显示不一致时需要转换的表头的构造函数
     * 此构造函数适用于此Header的转换类型已在PatternType中已有定义的情况
     * @param headLabel 表头显示的名称
     * @param patternType 该表头所转换所需的模板。
     */
    public Header(String headLabel, PatternType patternType) {
        this.headLabel = headLabel;
        this.patternType = patternType;
    }

    /**
     * 适用于构造导入完整表头的构造函数
     * @param headLabel 表头显示的名称
     * @param keyCol  该列是否属于可以区分该行数据唯一性的关键列
     */
    public Header(String headLabel, boolean keyCol){
        this.headLabel = headLabel;
        this.keyCol = keyCol;
    }
    
    /**
     * 适用于构造导入完整表头的构造函数,此构造函数的主要作用在于第三个参数分组<br>
     * 关于分组的使用,当我们需要根据三列来数据来判断每条记录是否与其它记录一样,而<br>
     * 判断的标准又是很特殊的,如:当第一列数据与其它数据重复时算重复;当第二,三列数据与<br>
     * 其它数据重复时也算重复,对于这样的情况在原来的框架结构上是不能处理的,所以这里引<br>
     * 进了分组的概念,具体的操作为将第一列的group设置为1;第二,三列的参数设置为2就可以<br>
     * 解决.<br>
     * 注:group默认从1开始
     * 
     * @param headLabel 表头显示的名称
     * @param keyCol  该列是否属于可以区分该行数据唯一性的关键列
     * @param group 关键列分组标识
     */
    public Header(String headLabel, boolean keyCol, byte group){
        this.headLabel = headLabel;
        this.keyCol = keyCol;
        this.group = group;
    }

    public String getHeadLabel() {
        return headLabel;
    }

    public void setHeadLabel(String headLabel) {
        this.headLabel = headLabel;
    }

    public FormatPattern getPattern() {
        return pattern;
    }

    public void setPattern(FormatPattern pattern) {
        this.pattern = pattern;
    }

    public boolean isKeyCol() {
        return keyCol;
    }

    public void setKeyCol(boolean keyCol) {
        this.keyCol = keyCol;
    }

	public PatternType getPatternType() {
		return patternType;
	}

	public void setPatternType(PatternType patternType) {
		this.patternType = patternType;
	}

	public byte getGroup() {
		return group;
	}

	public void setGroup(byte group) {
		this.group = group;
	}
	
}
